import axios from 'axios'
import { getConfig } from '@/utils'

// 创建axios实例
const instance = axios.create({
  baseURL: getConfig('BASE_URL'),
  timeout: 50000,
  // headers: {
  //   'Content-Type': 'lication/x-www-form-urlencoded;charset=UTF-8',
  // },
})

// axios实例拦截请求
instance.interceptors.request.use(
  function (config) {
    if (localStorage.getItem('token')) {
      config.headers['Authorization'] = localStorage.getItem('token')
    }

    config = disposeParams(config)

    return config
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject({ type: 'error', msg: '请求错误,请稍后重试' })
  }
)

// 添加响应拦截器
instance.interceptors.response.use(
  function (response) {
    if (response.data.code != 0) {
      return Promise.reject({ code: response.data.code, message: response.data.msg })
    }
    return response.data
  },
  async function (error) {
    // 对响应错误做点什么
    return Promise.reject({ message: '网络错误,请稍后重试' })
  }
)

/**
 * 接口请求
 * @param {*} method
 * @param {*} url
 * @param {*} data
 * @param {Object} extraConfig 额外配置 传入对象
 * @returns
 */
const request = (params) => {
  params = params || {}
  let data = {
    method: params.method,
    url: params.url,
    ...params.extraConfig
  }
  if (params.method === 'post' || params.method === 'PUT') {
    data.data = params.data
  } else {
    data.params = params.data
  }
  return instance(params)
}


/**
 * 全局处理get post请求传参携带空格
 * @param config
 */
const disposeParams = (config) => {
  // 处理所有请求参数的前后空格
  const params = config.params || {}
  for (const key in params) {
    if (typeof params[key] === 'string') {
      params[key] = params[key].trim()
    }
  }

  // 处理所有请求体的前后空格
  const data = config.data || {}
  for (const key in data) {
    if (typeof data[key] === 'string') {
      data[key] = data[key].trim()
    }
  }
  return config
}

export default request